import (
成都创新互联公司专业为企业提供南华网站建设、南华做网站、南华网站设计、南华网站制作等企业网站建设、网页设计与制作、南华企业网站模板建站服务,10多年南华做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
"fmt"
"reflect"
)
func reflecType(x interface{}){
v := reflect.TypeOf(x)
fmt.Println("type:%v\n", v)
fmt.Println("type name:%v , rtpe kind:%v \n", v.getName(), v.getType())
}
type Cat struct{}
//通过反射设置变量的值
func reflectSetValue1(x interface{}){
v := reflect.ValueOf(x)
if v.Kind() == reflect.Int64{
v.SetInt(200) //修改的是副本, reflect 包会引发panic
}
}
//通过反射设置变量的值
func reflectSetValue2(x interface{}){
v := reflect.ValueOf(x)
//反射中使用Elem()获取指针对应的值
if v.Elem().Kind() == reflect.Int64{
v.Elem().SetInt(200)
}
}
func main(){
var a float32 = 3.14
reflectType(a) //type name:float32 type kind:float32
var b int64 = 100
reflectType(b) // type name :int64 type kind :int64
var c = Cat{}
reflectType(c) // type name :Cat type kind :struct
reflectSetValue1(b)
fmt.Println(b) //依然为100
reflectSetValue2(b)
}
1.下载go的windows下的安装包:
也可以下载源代码,用MinGW编译。先配置好MinGW的环境,再运行all.bat即可。
MingW:
2.下载gocode,用于go的补全提示:
gocode 的github地址:
要安装git,在windows下,通常用msysgit。
再在cmd下安装:
go get -u github.com/nsf/gocode
也可以下载代码,直接用go build来编译,会生成gocode.exe。
3.在eclipse中安装插件:
4.配置插件:
(1).配置go的编译器
(2).配置gocode(可选),这里我用的是eclipse插件自带的gocode。
(3).配置gdb,做调试用(可选)
如果安装了MingW,可以在安装目录下找到gdb。
5.测试是否成功
新建一个go工程,再建立一个hello.go。如下图:
gdb调试如下(要在console中用输入命令来调试):
6.其它
2012年3月31日:
目前这个eclipse插件,只能把代码放在cmd包中才能运行。
貌似现在流行的是Sublime Text2 + gocode。Sublime Text也的确比较好用。
======================
Eclipse平台下配置Go语言开发环境(Win7)
《Go语言编程》中写到:“从功能和易用性等方面考虑, Eclipse+GoEclipse、LiteIDE这两个环境在所有IDE里面是表现最好的”,所以笔者打算采用Eclipse+GoEclipse开发环境。
Eclipse平台下配置Go语言开发环境步骤:
1、安装JDK和Eclipse
建议JDK1.6及以上版本。Eclipse3.6及以上版本。
2、安装GoEclipse插件
在Eclipse中点击菜单“Help”-》“Install New Software”打开如下对话框,添加go插件的安装地址:,
按提示一步一步操作即可,下载时可能会遇到网络问题,可使用goagent或其他代理。
3、安装并配置Go的编译器
下载地址:
下载时请注意版本,应选择windows-386的版本。
安装完后重启Eclipse,并通过菜单项“Window”-》“Preferences”-》“Go”打开Go语言的配置选项框。如下图:
选择Go的安装路径即可,如笔者的安装路径是F:\Work\Go
4、配置调试器(可选)
需要先安装MinGW,下载地址:
安装完之后,通过菜单项“Window”-》“Preferences”-》“Go”-》“Debugger”打开调试器的配置选项框。
将GDB路径配置为:MinGW安装目录下的gdb.exe文件即可。
5、配置代码自动补全(可选)
需要配置gocode,可使用goEclipse插件自带的版本,也可以自己下载:
笔者使用的是goEclipse插件自带的版本,配置方式如下:
通过菜单项“Window”-》“Preferences”-》“Go”-》“Gocode”打开配置选项框。
将Gocode的路径配置为:goEclipse的安装路径下的gocode.exe文件,如
F:\Work\eclipse\plugins\com.googlecode.goclipse.gocode_0.7.6.v450\tools\windows_386\gocode.exe
6、配置支持Import远程包(可选)
为了支持Import远程包,最好装个gowin-env。下载地址:。 如果下的是压缩包,请把它解压到C盘。例如,C:\gowin-env。里面有个Console.bat是以后使用go get的环境。举例:有个文件a.go,里面import (
"fmt"
"github.com/astaxie/beedb"
_ "github.com/ziutek/mymysql/godrv"
为了编译该a.go文件,需要启动Console.bat,然后在该命令行窗口,进入c:\go\src目录下,执行go getgithub.com/astaxie/beedb
Go get github.com/ziutek/mymysql/godrv .
Go 会自动下载该远程包并编译和安装这些包。
7、go install: no install location for directory *** outside GOPATH错误的处理
由于每一个Go程序都必须包含一个main包以及一个main()函数,因此如果没有main包就会导致上述错误。
What Doesn't Kill Me Makes Me Stronger
是的,Go语言需要使用service接口来实现服务器端的功能,例如处理HTTP请求、接收和发送数据等等。是的,Go语言需要使用service接口来实现服务器端的功能,例如处理HTTP请求、接收和发送数据等等。
相比较 C 和 Java 等其它语言而言,Go 语言中的 switch 结构使用上更加灵活。它接受任意形式的表达式,例如:
switch var1 {
case val1:
...
case val2:
...
default:
...
}
变量 var1 可以是任何类型,而 val1 和 val2 则可以是同类型的任意值。类型不被局限于常量或整数,但必须是相同的类型;或者最终结果为相同类型的表达式。前花括号{必须和 switch 关键字在同一行。 您可以同时测试多个可能符合条件的值,使用逗号分割它们,例如:case val1, val2, val3。每一个 case 分支都是唯一的,从上至下逐一测试,直到匹配为止。一旦成功地匹配到每个分支,在执行完相应代码后就会退出整个 switch 代码块,也就是说你不需要特别使用 break 语句来表示结束。
Go语言里面switch默认相当于每个case最后带有break,匹配成功后不会自动向下执行其他case,而是跳出整个switch。
本教程介绍 Go 中多模块工作区的基础知识。使用多模块工作区,您可以告诉 Go 命令您正在同时在多个模块中编写代码,并轻松地在这些模块中构建和运行代码。
在本教程中,您将在共享的多模块工作区中创建两个模块,对这些模块进行更改,并在构建中查看这些更改的结果。
本教程需要 go1.18 或更高版本。使用go.dev/dl中的链接确保您已在 Go 1.18 或更高版本中安装了 Go 。
首先,为您要编写的代码创建一个模块。
1、打开命令提示符并切换到您的主目录。
在 Linux 或 Mac 上:
在 Windows 上:
2、在命令提示符下,为您的代码创建一个名为工作区的目录。
3、初始化模块
我们的示例将创建一个hello依赖于 golang.org/x/example 模块的新模块。
创建你好模块:
使用 . 添加对 golang.org/x/example 模块的依赖项go get。
在 hello 目录下创建 hello.go,内容如下:
现在,运行 hello 程序:
在这一步中,我们将创建一个go.work文件来指定模块的工作区。
在workspace目录中,运行:
该go work init命令告诉为包含目录中模块的工作空间go创建一个文件 。go.work./hello
该go命令生成一个go.work如下所示的文件:
该go.work文件的语法与go.mod相同。
该go指令告诉 Go 应该使用哪个版本的 Go 来解释文件。它类似于文件中的go指令go.mod 。
该use指令告诉 Go在进行构建时hello目录中的模块应该是主模块。
所以在模块的任何子目录中workspace都会被激活。
2、运行工作区目录下的程序
在workspace目录中,运行:
Go 命令包括工作区中的所有模块作为主模块。这允许我们在模块中引用一个包,即使在模块之外。在模块或工作区之外运行go run命令会导致错误,因为该go命令不知道要使用哪些模块。
接下来,我们将golang.org/x/example模块的本地副本添加到工作区。然后,我们将向stringutil包中添加一个新函数,我们可以使用它来代替Reverse.
在这一步中,我们将下载包含该模块的 Git 存储库的副本golang.org/x/example,将其添加到工作区,然后向其中添加一个我们将从 hello 程序中使用的新函数。
1、克隆存储库
在工作区目录中,运行git命令来克隆存储库:
2、将模块添加到工作区
该go work use命令将一个新模块添加到 go.work 文件中。它现在看起来像这样:
该模块现在包括example.com/hello模块和 `golang.org/x/example 模块。
这将允许我们使用我们将在模块副本中编写的新代码,而不是使用命令stringutil下载的模块缓存中的模块版本。
3、添加新功能。
我们将向golang.org/x/example/stringutil包中添加一个新函数以将字符串大写。
将新文件夹添加到workspace/example/stringutil包含以下内容的目录:
4、修改hello程序以使用该功能。
修改workspace/hello/hello.go的内容以包含以下内容:
从工作区目录,运行
Go 命令在go.work文件指定的hello目录中查找命令行中指定的example.com/hello模块 ,同样使用go.work文件解析导入golang.org/x/example。
go.work可以用来代替添加replace 指令以跨多个模块工作。
由于这两个模块在同一个工作区中,因此很容易在一个模块中进行更改并在另一个模块中使用它。
现在,要正确发布这些模块,我们需要发布golang.org/x/example 模块,例如在v0.1.0. 这通常通过在模块的版本控制存储库上标记提交来完成。发布完成后,我们可以增加对 golang.org/x/example模块的要求hello/go.mod:
这样,该go命令可以正确解析工作区之外的模块。