GO 基础(一)
Go语言基础工程目录如下(采用LiteIDE):
备注:需要提前设置GOPATH,即工作目录,bin、pkg、src为默认的GO工程目录结构。GOPATH可以支持多个,在windows下配置在环境变量里,以;分割。
go install com.fredric\lib 命令编译库
go install com.fredric\main 命令编译出执行文件main.exe
实际项目中运用了GO语言,抽时间夯实基础,在lib中实现了一些测试函数,如下:
1、集合相关
- package lib
- import (
- "fmt"
- )
- //测试数组
- func ArrayTest() {
- var array = []uint8{, , }
- var i int =
- for i = ; i < len(array); i++ {
- fmt.Printf("array %d Element:%d\n", i, array[i])
- }
- }
- //测试结构体
- type User struct {
- UserName string
- PassWord string
- }
- func StructTest() {
- var user1 User
- user1.UserName = "Fredric"
- user1.PassWord = "Sinny"
- fmt.Printf("UserName: %s And Password %s\n", user1.UserName, user1.PassWord)
- //结构体指针
- var pUser1 *User
- pUser1 = &user1
- fmt.Printf("UserName: %s And Password %s\n", pUser1.UserName, pUser1.PassWord)
- }
- //测试切片
- func SliceTest() {
- //切片可以理解为可变数组
- var slice1 []uint8 = make([]uint8, , )
- //5为初始长度、10为容量,容量是可选参数,初始值为0
- fmt.Printf("slice1:%v Len:%d Cap:%d\n", slice1, len(slice1), cap(slice1))
- //此时LEN和CAP都为6
- slice1 = []uint8{, , , , , }
- fmt.Printf("slice1:%v Len:%d Cap:%d\n", slice1, len(slice1), cap(slice1))
- //切片可以超出容量
- var array = []uint8{, , , , , , , , , , }
- slice1 = array
- fmt.Printf("slice1:%v\n", slice1)
- //打印结果为3,4,5
- fmt.Printf("slice1 2:5 %v", slice1[:])
- array[] =
- //数组的值修改后,切片的值也对应修改,此时slice1[0] = 11
- //因此slice是一个指针,指向那段数据内存
- fmt.Printf("slice1:%v [0]:%d\n", slice1, slice1[])
- //此时slice1尾部增加0,0两个元素,len = 13 CAP = 32
- //注意:为什么此处CAP比len大那么多,因为在Slice上追加元素的时候,首先会放到这块空闲的内存中,
- //如果添加的参数个数超过了容量值,内存管理器会重新划分一块容量值为原容量值*2大小的内存空间
- slice1 = append(slice1, , )
- fmt.Printf("slice1:%v Len:%d Cap:%d\n", slice1, len(slice1), cap(slice1))
- newSlice := make([]uint8, len(slice1), cap(slice1))
- copy(newSlice, slice1)
- fmt.Printf("newSlice:%v Len:%d Cap:%d\n", newSlice, len(newSlice), cap(newSlice))
- }
- //测试MAp
- func MapTest() {
- var myMap map[uint8]string
- myMap = make(map[uint8]string)
- myMap[] = "fredric"
- myMap[] = "sinny"
- for item := range myMap {
- fmt.Printf("No[%d] Element Is %s\n", item, myMap[item])
- }
- item, res := myMap[]
- fmt.Printf("%s %t\n", item, res)
- delete(myMap, )
- item, res = myMap[]
- fmt.Printf("%s %t\n", item, res)
- }
2、函数相关
- package lib
- import (
- "fmt"
- )
- //多个参数多个返回值
- func test01(param1 string, param2 uint8) (string, bool) {
- fmt.Printf("Param1 = %s, Param2 = %d\n", param1, param2)
- return "result", true
- }
- //测试函数特性
- func FuncTest() {
- //res1, res2 := test01("hello,world", 6)
- //fmt.Println(res1, res2)
- //打印输出24
- fmt.Println(Factorial())
- }
- //菲波那切数列的递归函数
- func Factorial(x int) (result int) {
- if x == {
- result =
- } else {
- result = x * Factorial(x-)
- }
- return
- }
3、面向对象相关
- package lib
- import (
- "fmt"
- )
- //定义一个接口
- type Service interface {
- doService()
- getParam() string
- setParam(input string)
- }
- type ServiceImpl1 struct {
- param string
- }
- func (impl1 *ServiceImpl1) doService() {
- fmt.Println("ServiceImpl1", impl1.param)
- }
- func (impl1 *ServiceImpl1) getParam() string {
- return impl1.param
- }
- func (impl1 *ServiceImpl1) setParam(input string) {
- impl1.param = input
- }
- type ServiceImpl2 struct {
- param string
- }
- func (impl2 *ServiceImpl2) doService() {
- fmt.Println("ServiceImpl2", impl2.param)
- }
- func (impl2 *ServiceImpl2) getParam() string {
- return impl2.param
- }
- func (impl2 *ServiceImpl2) setParam(input string) {
- impl2.param = input
- }
- //测试利用接口的面向对象
- func OOTest() {
- var service Service
- service = new(ServiceImpl1)
- service.setParam("Fredric")
- //打印ServiceImpl1 Fredric
- service.doService()
- service = new(ServiceImpl2)
- service.setParam("Sinny")
- //打印ServiceImpl2 Sinny
- service.doService()
- }
GO 基础(一)的更多相关文章
- java基础集合经典训练题
第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...
- node-webkit 环境搭建与基础demo
首先去github上面下载(地址),具体更具自己的系统,我的是windows,这里只给出windows的做法 下载windows x64版本 下载之后解压,得到以下东西 为了方便,我们直接在这个目录中 ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- Golang, 以17个简短代码片段,切底弄懂 channel 基础
(原创出处为本博客:http://www.cnblogs.com/linguanh/) 前序: 因为打算自己搞个基于Golang的IM服务器,所以复习了下之前一直没怎么使用的协程.管道等高并发编程知识 ...
- [C#] C# 基础回顾 - 匿名方法
C# 基础回顾 - 匿名方法 目录 简介 匿名方法的参数使用范围 委托示例 简介 在 C# 2.0 之前的版本中,我们创建委托的唯一形式 -- 命名方法. 而 C# 2.0 -- 引进了匿名方法,在 ...
- HTTPS 互联网世界的安全基础
近一年公司在努力推进全站的 HTTPS 化,作为负责应用系统的我们,在配合这个趋势的过程中,顺便也就想去搞清楚 HTTP 后面的这个 S 到底是个什么含义?有什么作用?带来了哪些影响?毕竟以前也就只是 ...
- Swift与C#的基础语法比较
背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...
- .NetCore MVC中的路由(1)路由配置基础
.NetCore MVC中的路由(1)路由配置基础 0x00 路由在MVC中起到的作用 前段时间一直忙于别的事情,终于搞定了继续学习.NetCore.这次学习的主题是MVC中的路由.路由是所有MVC框 ...
- .NET基础拾遗(5)多线程开发基础
Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...
- .NET 基础 一步步 一幕幕[面向对象之方法、方法的重载、方法的重写、方法的递归]
方法.方法的重载.方法的重写.方法的递归 方法: 将一堆代码进行重用的一种机制. 语法: [访问修饰符] 返回类型 <方法名>(参数列表){ 方法主体: } 返回值类型:如果不需要写返回值 ...
随机推荐
- servlet文件下载
创建web工程servlet,新建DownloadServlet.java package com.xmyself.servlet; import java.io.File; import java. ...
- js callee,caller学习
原文地址:js callee,caller学习 /* * caller 返回一个对函数的引用,该函数调用了当前函数. * 如果函数是由顶层调用的,那么 caller包含的就是 null . * 如果在 ...
- C#项目中文件的具体含义
1.Bin 目录 用来存放编译的结果,bin是二进制binary的英文缩写,因为最初C编译的程序文件都是二进制文件,它有Debug和Release两个版本,分别对应的文件夹为bin/Debug和bin ...
- beans.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- IT运维监控解决方案介绍
现状 •小公司/ 创业团队< 500台服务器规模 开源方案:Zabbix.Nagios.Cacti- 云服务提供商:监控宝.oneAlert等 •BAT级别> 10万台服务器 投 ...
- “老坛泡新菜”:SOD MVVM框架,让WinForms焕发新春
火热的MVVM框架 最近几年最热门的技术之一就是前端技术了,各种前端框架,前端标准和前端设计风格层出不穷,而在众多前端框架中具有MVC,MVVM功能的框架成为耀眼新星,比如GitHub关注度很高的Vu ...
- Log4Net应用问题
问题 一.日志存储方式 1.txt 2.SQLServer数据库 3.log文件 二.项目类型不同 1winFrom 2webFrom 3MVC 4WPF 5控制台 三.切分依据不同 1.空间大小 2 ...
- linux压力测试工具stress
最近给PASS平台添加autoscaling的功能,根据服务器的负载情况autoscaling,为了测试这项功能用到了stress这个压力测试工具,这个工具相当好用了.具体安装方式就不说了.记录下这个 ...
- JavaWeb的国际化
国际化 1.国际化开发概述 1.1.软件的国际化 软件开发时,要使它能同时应对世界不同地区和国家的方法,并针对不同地区和国家的方法,提供相应的,符合来访者阅读习惯的页面或数据 国际化简称:i18n : ...
- 在CentOS上构建.net自动化编译环境
我们知道在Windows上我们很容易构建于MSBuild的自动化编译环境,那么在CentOS也是可以的,主要是需要Mono. 在这儿我们选择Jenkins+Gitlab+Mono在C ...