【问题】
折腾:
期间,用如下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | var logFilename string = filenameOnly + ".log" ; //logfile,err: = os.OpenFile("/Users/cybercare/tmp/test.log",os.O_RDWR|os.O_CREATE,0666) logFile, err: = os.OpenFile(logFilename, os.O_RDWR|os.O_CREATE, 0777 ) if err!=nil{ fmt.Printf( "open file error=%s\r\n" ,err.Error()) os.Exit(- 1 ) } defer logFile.Close() logger:=log.New(logFile, "\r\n" , log.Ldate | log.Ltime | log.Llongfile) logger.Println( "hello" ) logger.Println( "oh...." ) logger.Fatal( "test" ) logger.Fatal( "test2" ) |
结果出错:
1 2 3 | D:\tmp\tmp_dev_root\go\src\github.com\user\EmulateLoginBaidu>go run EmulateLoginBaidu.go # command-line-arguments .\EmulateLoginBaidu.go:55: syntax error: unexpected :, expecting := or = or comma |
如图:
即:
syntax error: unexpected :, expecting := or = or comma |
【解决过程】
1.去把import中的os加上,改为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | package main import ( "fmt" //"log" "os" //"io/ioutil" //"net/http" "runtime" "path" "strings" ) // GetCurFilename // Get current file name, without suffix func GetCurFilename() string { // var currentDir string // currentDir, err := os.Getwd() // fmt.Println("currentDir=%s", currentDir) // if err != nil { // fmt.Println("get current directory error=%s\n", err) // } _, fulleFilename, _, _ := runtime.Caller( 0 ) //fmt.Println(fulleFilename) var filenameWithSuffix string filenameWithSuffix = path.Base(fulleFilename) //fmt.Println("filenameWithSuffix=", filenameWithSuffix) var fileSuffix string fileSuffix = path.Ext(filenameWithSuffix) //fmt.Println("fileSuffix=", fileSuffix) //filenameWithSuffix = "EmulateLoginBaidu" //fileSuffix = ".go" //filenameWithSuffix = "EmulateLoginBaidu.go.go.go" //fileSuffix = ".go" //filenameWithSuffix = "EmulateLoginBaidu.go.txt" //fileSuffix = ".go" var filenameOnly string filenameOnly = strings.TrimSuffix(filenameWithSuffix, fileSuffix) //fmt.Println("filenameOnly=", filenameOnly) return filenameOnly } func main() { fmt.Printf( "this is EmulateLoginBaidu.go\n" ) var filenameOnly string filenameOnly = GetCurFilename() fmt.Println( "filenameOnly=" , filenameOnly) var logFilename string = filenameOnly + ".log" ; //logfile,err: = os.OpenFile("/Users/cybercare/tmp/test.log",os.O_RDWR|os.O_CREATE,0666) logFile, err: = os.OpenFile(logFilename, os.O_RDWR | os.O_CREATE, 0777 ) if err!=nil{ fmt.Printf( "open file error=%s\r\n" ,err.Error()) os.Exit(- 1 ) } defer logFile.Close() logger:=log.New(logFile, "\r\n" , log.Ldate | log.Ltime | log.Llongfile) logger.Println( "hello" ) logger.Println( "oh...." ) logger.Fatal( "test" ) logger.Fatal( "test2" ) //var baiduMainUrl string //baiduMainUrl = "http://www.baidu.com/"; //baiduMainUrl := "http://www.baidu.com/"; // var baiduMainUrl string = "http://www.baidu.com/"; // fmt.Printf("baiduMainUrl=%s\n", baiduMainUrl) // resp, err := http.Get(baiduMainUrl) // if err != nil { // fmt.Printf("http get response errror=%s\n", err) // } // defer resp.Body.Close() // body, err := ioutil.ReadAll(resp.Body) // fmt.Printf("body=%s\n", body) } |
结果:
错误依旧。
2.再改为:
1 2 | //logFile, err: = os.OpenFile(logFilename, os.O_RDWR | os.O_CREATE, 0777) logFile, err: = os.OpenFile(logFilename, os.O_RDWR | os.O_CREATE, 0777 ); |
结果错误依旧。
3.参考:
In an import clause: "syntax error: unexpected :, expecting := or = or comma" — wot?
结果也是没有太大帮助。
4.此处,经过自己认真看代码,发现错误了:
自己不小心,把
1 |
写成了
1 | : = |
即,冒号和等号之间,多了个空格。
所以出现语法错误,改为:
1 2 3 4 | //logfile,err: = os.OpenFile("/Users/cybercare/tmp/test.log",os.O_RDWR|os.O_CREATE,0666) //logFile, err: = os.OpenFile(logFilename, os.O_RDWR | os.O_CREATE, 0777) //logFile, err: = os.OpenFile(logFilename, os.O_RDWR | os.O_CREATE, 0777); logFile, err := os.OpenFile(logFilename, os.O_RDWR | os.O_CREATE, 0777 ) |
即可。
【总结】
此处,go代码:
1 | logFile, err: = os.OpenFile(logFilename, os.O_RDWR | os.O_CREATE, 0777 ) |
出现:
syntax error: unexpected :, expecting := or = or comma |
的错误,原因是:
自己的笔误,在给原先参考别人的代码,没有空格,而自己手动去加空格的时候,不小心把:
冒号等于号
弄成了:
冒号空格等于号
所以出错了。
改为正确的:
1 |
即可。
转载请注明:在路上 » 【已解决】go语言编译出错:syntax error: unexpected :, expecting := or = or comma