Go语言基础工程目录如下(采用LiteIDE):

备注:需要提前设置GOPATH,即工作目录,bin、pkg、src为默认的GO工程目录结构。GOPATH可以支持多个,在windows下配置在环境变量里,以;分割。

go install com.fredric\lib 命令编译库

go install com.fredric\main 命令编译出执行文件main.exe

实际项目中运用了GO语言,抽时间夯实基础,在lib中实现了一些测试函数,如下:

1、集合相关

  1. package lib
  2.  
  3. import (
  4. "fmt"
  5. )
  6.  
  7. //测试数组
  8. func ArrayTest() {
  9. var array = []uint8{, , }
  10. var i int =
  11.  
  12. for i = ; i < len(array); i++ {
  13. fmt.Printf("array %d Element:%d\n", i, array[i])
  14. }
  15. }
  16.  
  17. //测试结构体
  18. type User struct {
  19. UserName string
  20. PassWord string
  21. }
  22.  
  23. func StructTest() {
  24. var user1 User
  25. user1.UserName = "Fredric"
  26. user1.PassWord = "Sinny"
  27.  
  28. fmt.Printf("UserName: %s And Password %s\n", user1.UserName, user1.PassWord)
  29.  
  30. //结构体指针
  31. var pUser1 *User
  32. pUser1 = &user1
  33. fmt.Printf("UserName: %s And Password %s\n", pUser1.UserName, pUser1.PassWord)
  34. }
  35.  
  36. //测试切片
  37. func SliceTest() {
  38. //切片可以理解为可变数组
  39. var slice1 []uint8 = make([]uint8, , )
  40. //5为初始长度、10为容量,容量是可选参数,初始值为0
  41. fmt.Printf("slice1:%v Len:%d Cap:%d\n", slice1, len(slice1), cap(slice1))
  42.  
  43. //此时LEN和CAP都为6
  44. slice1 = []uint8{, , , , , }
  45. fmt.Printf("slice1:%v Len:%d Cap:%d\n", slice1, len(slice1), cap(slice1))
  46.  
  47. //切片可以超出容量
  48. var array = []uint8{, , , , , , , , , , }
  49. slice1 = array
  50. fmt.Printf("slice1:%v\n", slice1)
  51. //打印结果为3,4,5
  52. fmt.Printf("slice1 2:5 %v", slice1[:])
  53. array[] =
  54. //数组的值修改后,切片的值也对应修改,此时slice1[0] = 11
  55. //因此slice是一个指针,指向那段数据内存
  56. fmt.Printf("slice1:%v [0]:%d\n", slice1, slice1[])
  57.  
  58. //此时slice1尾部增加0,0两个元素,len = 13 CAP = 32
  59. //注意:为什么此处CAP比len大那么多,因为在Slice上追加元素的时候,首先会放到这块空闲的内存中,
  60. //如果添加的参数个数超过了容量值,内存管理器会重新划分一块容量值为原容量值*2大小的内存空间
  61. slice1 = append(slice1, , )
  62. fmt.Printf("slice1:%v Len:%d Cap:%d\n", slice1, len(slice1), cap(slice1))
  63.  
  64. newSlice := make([]uint8, len(slice1), cap(slice1))
  65. copy(newSlice, slice1)
  66. fmt.Printf("newSlice:%v Len:%d Cap:%d\n", newSlice, len(newSlice), cap(newSlice))
  67. }
  68.  
  69. //测试MAp
  70. func MapTest() {
  71. var myMap map[uint8]string
  72.  
  73. myMap = make(map[uint8]string)
  74. myMap[] = "fredric"
  75. myMap[] = "sinny"
  76.  
  77. for item := range myMap {
  78. fmt.Printf("No[%d] Element Is %s\n", item, myMap[item])
  79. }
  80.  
  81. item, res := myMap[]
  82. fmt.Printf("%s %t\n", item, res)
  83.  
  84. delete(myMap, )
  85. item, res = myMap[]
  86. fmt.Printf("%s %t\n", item, res)
  87. }

2、函数相关

  1. package lib
  2.  
  3. import (
  4. "fmt"
  5. )
  6.  
  7. //多个参数多个返回值
  8. func test01(param1 string, param2 uint8) (string, bool) {
  9. fmt.Printf("Param1 = %s, Param2 = %d\n", param1, param2)
  10. return "result", true
  11. }
  12.  
  13. //测试函数特性
  14. func FuncTest() {
  15. //res1, res2 := test01("hello,world", 6)
  16. //fmt.Println(res1, res2)
  17.  
  18. //打印输出24
  19. fmt.Println(Factorial())
  20. }
  21.  
  22. //菲波那切数列的递归函数
  23. func Factorial(x int) (result int) {
  24. if x == {
  25. result =
  26. } else {
  27. result = x * Factorial(x-)
  28. }
  29. return
  30. }

3、面向对象相关

  1. package lib
  2.  
  3. import (
  4. "fmt"
  5. )
  6.  
  7. //定义一个接口
  8. type Service interface {
  9. doService()
  10. getParam() string
  11. setParam(input string)
  12. }
  13.  
  14. type ServiceImpl1 struct {
  15. param string
  16. }
  17.  
  18. func (impl1 *ServiceImpl1) doService() {
  19. fmt.Println("ServiceImpl1", impl1.param)
  20. }
  21.  
  22. func (impl1 *ServiceImpl1) getParam() string {
  23. return impl1.param
  24. }
  25.  
  26. func (impl1 *ServiceImpl1) setParam(input string) {
  27. impl1.param = input
  28. }
  29.  
  30. type ServiceImpl2 struct {
  31. param string
  32. }
  33.  
  34. func (impl2 *ServiceImpl2) doService() {
  35. fmt.Println("ServiceImpl2", impl2.param)
  36. }
  37.  
  38. func (impl2 *ServiceImpl2) getParam() string {
  39. return impl2.param
  40. }
  41.  
  42. func (impl2 *ServiceImpl2) setParam(input string) {
  43. impl2.param = input
  44. }
  45.  
  46. //测试利用接口的面向对象
  47. func OOTest() {
  48. var service Service
  49. service = new(ServiceImpl1)
  50. service.setParam("Fredric")
  51. //打印ServiceImpl1 Fredric
  52. service.doService()
  53.  
  54. service = new(ServiceImpl2)
  55. service.setParam("Sinny")
  56. //打印ServiceImpl2 Sinny
  57. service.doService()
  58. }

GO 基础(一)的更多相关文章

  1. java基础集合经典训练题

    第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...

  2. node-webkit 环境搭建与基础demo

    首先去github上面下载(地址),具体更具自己的系统,我的是windows,这里只给出windows的做法 下载windows x64版本 下载之后解压,得到以下东西 为了方便,我们直接在这个目录中 ...

  3. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  4. Golang, 以17个简短代码片段,切底弄懂 channel 基础

    (原创出处为本博客:http://www.cnblogs.com/linguanh/) 前序: 因为打算自己搞个基于Golang的IM服务器,所以复习了下之前一直没怎么使用的协程.管道等高并发编程知识 ...

  5. [C#] C# 基础回顾 - 匿名方法

    C# 基础回顾 - 匿名方法 目录 简介 匿名方法的参数使用范围 委托示例 简介 在 C# 2.0 之前的版本中,我们创建委托的唯一形式 -- 命名方法. 而 C# 2.0 -- 引进了匿名方法,在 ...

  6. HTTPS 互联网世界的安全基础

    近一年公司在努力推进全站的 HTTPS 化,作为负责应用系统的我们,在配合这个趋势的过程中,顺便也就想去搞清楚 HTTP 后面的这个 S 到底是个什么含义?有什么作用?带来了哪些影响?毕竟以前也就只是 ...

  7. Swift与C#的基础语法比较

    背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...

  8. .NetCore MVC中的路由(1)路由配置基础

    .NetCore MVC中的路由(1)路由配置基础 0x00 路由在MVC中起到的作用 前段时间一直忙于别的事情,终于搞定了继续学习.NetCore.这次学习的主题是MVC中的路由.路由是所有MVC框 ...

  9. .NET基础拾遗(5)多线程开发基础

    Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...

  10. .NET 基础 一步步 一幕幕[面向对象之方法、方法的重载、方法的重写、方法的递归]

    方法.方法的重载.方法的重写.方法的递归 方法: 将一堆代码进行重用的一种机制. 语法: [访问修饰符] 返回类型 <方法名>(参数列表){ 方法主体: } 返回值类型:如果不需要写返回值 ...

随机推荐

  1. servlet文件下载

    创建web工程servlet,新建DownloadServlet.java package com.xmyself.servlet; import java.io.File; import java. ...

  2. js callee,caller学习

    原文地址:js callee,caller学习 /* * caller 返回一个对函数的引用,该函数调用了当前函数. * 如果函数是由顶层调用的,那么 caller包含的就是 null . * 如果在 ...

  3. C#项目中文件的具体含义

    1.Bin 目录 用来存放编译的结果,bin是二进制binary的英文缩写,因为最初C编译的程序文件都是二进制文件,它有Debug和Release两个版本,分别对应的文件夹为bin/Debug和bin ...

  4. beans.xml

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  5. IT运维监控解决方案介绍

    现状 •小公司/ 创业团队< 500台服务器规模 开源方案:Zabbix.Nagios.Cacti- 云服务提供商:监控宝.oneAlert等 •BAT级别> 10万台服务器 投 ...

  6. “老坛泡新菜”:SOD MVVM框架,让WinForms焕发新春

    火热的MVVM框架 最近几年最热门的技术之一就是前端技术了,各种前端框架,前端标准和前端设计风格层出不穷,而在众多前端框架中具有MVC,MVVM功能的框架成为耀眼新星,比如GitHub关注度很高的Vu ...

  7. Log4Net应用问题

    问题 一.日志存储方式 1.txt 2.SQLServer数据库 3.log文件 二.项目类型不同 1winFrom 2webFrom 3MVC 4WPF 5控制台 三.切分依据不同 1.空间大小 2 ...

  8. linux压力测试工具stress

    最近给PASS平台添加autoscaling的功能,根据服务器的负载情况autoscaling,为了测试这项功能用到了stress这个压力测试工具,这个工具相当好用了.具体安装方式就不说了.记录下这个 ...

  9. JavaWeb的国际化

    国际化 1.国际化开发概述 1.1.软件的国际化 软件开发时,要使它能同时应对世界不同地区和国家的方法,并针对不同地区和国家的方法,提供相应的,符合来访者阅读习惯的页面或数据 国际化简称:i18n : ...

  10. 在CentOS上构建.net自动化编译环境

             我们知道在Windows上我们很容易构建于MSBuild的自动化编译环境,那么在CentOS也是可以的,主要是需要Mono. 在这儿我们选择Jenkins+Gitlab+Mono在C ...